/**
 * 角色权限实体类 - RBAC权限模型中角色和权限的关联实体
 *
 * 开发人员：陈宏伟
 * 开发时间：2025-10-20 至 2025-10-25
 * 模块职责：定义角色权限关联的基本信息和业务属性，支持RBAC权限模型的角色权限管理
 *
 * 技术要点：
 * - 多租户关联设计，与角色实体关联
 * - 权限代码和权限名称管理
 * - 权限分配和继承机制
 * - 审计字段自动维护权限分配时间
 * - 唯一性约束防止重复权限分配
 *
 * 开发故事：负责角色权限实体的数据模型设计，与权限服务和角色管理深度配合，实现灵活的RBAC权限分配和管理功能。
 */
package com.pbl.entity;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import javax.persistence.*;
import java.time.LocalDateTime;

/**
 * 角色权限关联实体 - 定义角色和权限的关联关系，支持RBAC权限模型
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Entity
@Table(name = "role_permissions")
public class RolePermission {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "role_id", nullable = false)
    private Role role;

    @Column(name = "permission_code", nullable = false, length = 64)
    private String permissionCode;

    @Column(name = "permission_name", nullable = false, length = 64)
    private String permissionName;

    @Column(name = "created_at", nullable = false)
    private LocalDateTime createdAt;

    @PrePersist
    public void onCreate() {
        createdAt = LocalDateTime.now();
    }
}

